/* 判断一个表达式中括号是否配对（假设只包含圆括号）*/
#include <iostream>
#include "stackfun.h"
using namespace std;

// 判断字符串的括号是否配对
bool fun(stack &s, string str)
{
  int i = 0;
  
  // 循环遍历字符串
  while (str[i] != '\0')
  {
    switch (str[i])
    {
      // '(' 加载进栈
      case '(':
        push(s, '(');
        break;
      
      // '{' 加载进栈
      case '{':
        push(s, '{');
        break;
      
      // ')'，则查看栈顶元素是否与之配对
      case ')':
        if (pop(s) != '(')
          return false;
        break;
      
      // '}'，则查看栈顶元素是否与之配对
      case '}':
        if (pop(s) != '{')
          return false;
        break;
      
      // 其余的，不关注
      default:
        break;
    }
    ++i;
  }
  
  // 最后栈空，则括号配对
  if (s.top == -1)
    return true;
  
  // 否则，括号不配对
  else
    return false;
}

int main()
{
  // 创建栈
  stack s;
  
  // 初始化栈
  Init(s);
  
  // 生成字符串
  string S = "(15+())";
  
  // 判断括号是否配对
  bool q = fun(s, S);
  
  // 打印
  if (q == true)
    cout << "字符串的括号配对" << endl;
  else
    cout << "字符串的括号不配对" << endl;
}